﻿<?php

// 微信登录
include_once "../util.php";

$js_code=$_REQUEST['code'];
//$js_code="013BnaDV1kUqYS0vRhCV1FXcDV1BnaDB";
$url='https://api.weixin.qq.com/sns/jscode2session';//请求的url地址

$getArr = array(
    'appid' => 'wx64f3cdf35ea06388',
    'secret' => 'a833ebb37811b67069267445343e56dd',
    'js_code' => $js_code,
    'grant_type' => 'authorization_code'
);
$url = $url . '?' . http_build_query($getArr);
$curl = curl_init($url); //开启curl
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
$wxdata = curl_exec($curl); //执行curl操作
curl_close($curl);

$wxdata = json_decode($wxdata);
$wxdataArr=objectToArray($wxdata);
// 将相关ssid,usid,loginWay 添加到数据库中

// 获取数据库中对应openid的usid

$wxid=$wxdataArr['openid'];
$skey=$wxdataArr['session_key'];
$usid=uuid();
$openid = selectRecordByKey('wxopenid', 'openid', $wxid);
if($openid){
    $usid=$openid['usid'];
}else{
    // 关联openid到数据库
    $timestamp=time();
    $sql ="INSERT INTO `wxopenid` VALUES ('$wxid', '$usid',$timestamp)";
    $result = mysqli_query($conn, $sql);
    if(!$result){
        echo json_encode(array(
            'stats' => 0,
            'msg'=>"获取微信服务器数据失败"
        ));
        return;
    }
}

$ssid = uuid();
$ssid_result = saveSessionKey($usid, $skey, $ssid, 1);
if ($ssid_result) {
    // ssid 更新成功，查询数据库表 users 中是否有相关账号信息，没有则为第一次使用微信登录，需要补充账号资料
    checkWxloginRecord();
} else {
    // ssid 更新失败，需要重新登录
    echo json_encode(array(
        'stats' => 0,
        'msg'=>"获取会话密钥失败"
    ));
}

function checkWxloginRecord(){
    global $ssid,$usid;
    $result = selectRecordByKey('users', 'usid', $usid);
    $output=array();
    if($result){
        // 非第一次登录
        $output['self']=$result;
        $output['stats'] = 1;
        $output['userRows']=getAllUsers($usid);
        $output['ssid'] = $ssid;
    }else{
        $output['stats'] = 2; // 2为第一次使用微信登录
        $output['usid'] = $usid;
    }
    unset($output['session_key']); // session_key 不返回客户端
    echo json_encode($output);
}

// 微信第一次登录，如果5分钟没有完成账号绑定，则视为取消登录，删除数据库中相关数据
function delete_first_wxlogin_data($usid){
    global $conn;
    $tableArr=array('users','sessionKey','wxopenid');
    for($i=0;$i<count($tableArr);$i++){
        $sql="DELETE FROM `$tableArr[$i]` WHERE `usid` = '$usid'";
        mysqli_query($conn,$sql);
    }
}
